﻿
namespace BuildConfiguratorNS
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// General Setting structure.
    /// </summary>
    public class GeneralSettings
    {
        /// <summary>
        /// Project Name to be displayed in CCNET.
        /// </summary>
        private string ccnetProjectName;
        private string targetPath;
        private string devenvPath;
        /// <summary>
        /// Gets or sets ccnet project name.
        /// </summary>
        public string CCnetProjectName
        {
            get { return this.ccnetProjectName; }
            set { this.ccnetProjectName = value; }
        }
        public string TargetPath
        {
            get
            {
                return this.targetPath;
            }
            set
            {
                this.targetPath = value;
            }
        }
        public string DevEnvPath
        {
            get
            {
                return devenvPath;
            }
            set
            {
                devenvPath = value;
            }

        }
    }

    /// <summary>
    /// Pre-Script Settings structure.
    /// </summary>
    public class PreScriptSettings
    {
        /// <summary>
        /// Enable/Disable pre-script task.
        /// </summary>
        private bool enablePreScript;

        /// <summary>
        /// Pre-Script file name.
        /// </summary>
        private string prescriptFile;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// the pre build script task has to be 
        /// enabled or not.
        /// </summary>
        public bool EnablePreScript
        {
            get { return this.enablePreScript; }
            set { this.enablePreScript = value; }
        }

        /// <summary>
        /// Gets or sets Pre-Script file name.
        /// </summary>
        public string PreScriptFile
        {
            get { return this.prescriptFile; }
            set { this.prescriptFile = value; }
        }
    }

    /// <summary>
    /// Version settings structure.
    /// </summary>
    public class VersioningSettings
    {
        /// <summary>
        /// Enable/Disable version task.
        /// </summary>
        private bool enableVersion;

        /// <summary>
        /// Major version number.
        /// </summary>
        private string majorVersion;

        /// <summary>
        /// Minor version number.
        /// </summary>
        private string minorVersion;

        /// <summary>
        /// Build number.
        /// </summary>
        private string build;

        /// <summary>
        /// Revison number.
        /// </summary>
        private string revision;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// versioning has to be enabled or not.
        /// </summary>
        public bool EnableVersion
        {
            get { return this.enableVersion; }
            set { this.enableVersion = value; }
        }

        /// <summary>
        /// Gets or sets Major version.
        /// </summary>
        public string MajorVersion
        {
            get { return this.majorVersion; }
            set { this.majorVersion = value; }
        }

        /// <summary>
        /// Gets or sets Minor version.
        /// </summary>
        public string MinorVersion
        {
            get { return this.minorVersion; }
            set { this.minorVersion = value; }
        }

        /// <summary>
        /// Gets or sets Build number.
        /// </summary>
        public string Build
        {
            get { return this.build; }
            set { this.build = value; }
        }

        /// <summary>
        /// Gets or sets revision number.
        /// </summary>
        public string Revision
        {
            get { return this.revision; }
            set { this.revision = value; }
        }
    }

    /// <summary>
    /// Svn Source control settings structure.
    /// </summary>
    public class SourceControlSettings
    {
        ///// <summary>
        ///// Enable/Disable svn task.
        ///// </summary>
        // public bool EnableSourceControl;

        /// <summary>
        /// Trunk url path.
        /// </summary>
        private string trunkUrl;

        /// <summary>
        /// Svn user name.
        /// </summary>
        private string userName;

        /// <summary>
        /// Svn password.
        /// </summary>
        private string password;

        /// <summary>
        /// Enable/Disable auto get source code.
        /// </summary>
        private string autogetSource;

        /// <summary>
        /// Enable/Disable tagging on success.
        /// </summary>
        private string tagOnSuccess;

        /// <summary>
        /// Tag base url.
        /// </summary>
        private string tagBaseUrl;

        /// <summary>
        /// Source control operation time out.
        /// </summary>
        private string timeout;

        /// <summary>
        /// Gets or sets svn trunk url.
        /// </summary>
        public string TrunkUrl
        {
            get { return this.trunkUrl; }
            set { this.trunkUrl = value; }
        }

        /// <summary>
        /// Gets or sets svn user name.
        /// </summary>
        public string UserName
        {
            get { return this.userName; }
            set { this.userName = value; }
        }

        /// <summary>
        /// Gets or sets svn password.
        /// </summary>
        public string Password
        {
            get { return this.password; }
            set { this.password = value; }
        }

        /// <summary>
        /// Gets or sets auto get source 
        /// property enabled.
        /// </summary>
        public string AutoGetSource
        {
            get { return this.autogetSource; }
            set { this.autogetSource = value; }
        }

        /// <summary>
        /// Gets or sets tag buils on success.
        /// </summary>
        public string TagOnSuccess
        {
            get { return this.tagOnSuccess; }
            set { this.tagOnSuccess = value; }
        }

        /// <summary>
        /// Gets or sets svn tag base url.
        /// </summary>
        public string TagBaseUrl
        {
            get { return this.tagBaseUrl; }
            set { this.tagBaseUrl = value; }
        }

        /// <summary>
        /// Gets or sets svn operation time out.
        /// </summary>
        public string Timeout
        {
            get { return this.timeout; }
            set { this.timeout = value; }
        }

        private string sourceType;

        public string SourceType
        {
            get { return sourceType; }
            set { sourceType = value; }
        }
        private string domain;

        public string Domain
        {
            get { return domain; }
            set { domain = value; }
        }

        private string vstsproject;

        public string Vstsproject
        {
            get { return vstsproject; }
            set { vstsproject = value; }
        }

        private string ccViewPath;

        public string CcViewPath
        {
            get { return ccViewPath; }
            set { ccViewPath = value; }
        }
        private string ccBranch;

        public string CCBranch
        {
            get { return ccBranch; }
            set { ccBranch = value; }
        }
        private string isCCBaseLine;

        public string IsCCBaseLine
        {
            get { return isCCBaseLine; }
            set { isCCBaseLine = value; }
        }
        private string ccProjectVob;

        public string CCProjectVob
        {
            get { return ccProjectVob; }
            set { ccProjectVob = value; }
        }
        private string ccViewName;

        public string CcViewName
        {
            get { return ccViewName; }
            set { ccViewName = value; }
        }





    }

    /// <summary>
    /// Trigger settings.
    /// </summary>
    public class TriggerSettings
    {
        /// <summary>
        /// Enable/Disable triggering the build.
        /// </summary>
        private bool enableTrigger;

        /// <summary>
        /// Trigger interval.
        /// </summary>
        private string triggerInterval;

        /// <summary>
        /// Setting the build condition
        /// </summary>
        private string buildCondition;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// triggering to the build on source code
        /// modification should be enabled.
        /// </summary>
        public bool EnableTrigger
        {
            get { return this.enableTrigger; }
            set { this.enableTrigger = value; }
        }

        /// <summary>
        /// Gets or sets trigger interval for build.
        /// </summary>
        public string TriggerInterval
        {
            get { return this.triggerInterval; }
            set { this.triggerInterval = value; }
        }

        public string BuildCondition
        {
            get { return this.buildCondition; }
            set { this.buildCondition = value; }
        }

    }

    /// <summary>
    /// Schedule Trigger settings.
    /// </summary>
    public class ScheduleTriggerSetting
    {
        /// <summary>
        /// Enable/Disable triggering the build.
        /// </summary>
        private bool enablescheduleTrigger;

        /// <summary>
        /// Trigger interval.
        /// </summary>
        private string triggerIntervalTime;

        /// <summary>
        /// Setting the build condition
        /// </summary>
        private string buildCondition;

        /// <summary>
        /// setting the selected weekdays 
        /// </summary>
        private string weekdays;


        /// <summary>
        /// Gets or sets a value indicating whether
        /// triggering to the build on source code
        /// modification should be enabled.
        /// </summary>
        public bool EnablescheduleTrigger
        {
            get { return this.enablescheduleTrigger; }
            set { this.enablescheduleTrigger = value; }
        }

        /// <summary>
        /// Gets or sets trigger interval for build.
        /// </summary>
        public string TriggerIntervalTime
        {
            get { return this.triggerIntervalTime; }
            set { this.triggerIntervalTime = value; }
        }

        /// <summary>
        /// Gets or Sets Build Condition
        /// </summary>
        public string BuildCondition
        {
            get { return this.buildCondition; }
            set { this.buildCondition = value; }
        }

        public string WeekDays
        {
            get { return this.weekdays; }
            set { this.weekdays = value; }

        }


    }

    /// <summary>
    /// Filter Trigger settings.
    /// </summary>
    public class FilterTriggerSetting
    {
        /// <summary>
        /// Enable/Disable Filter triggering the build.
        /// </summary>
        private bool enableFilterTrigger;

        /// <summary>
        /// start time 
        /// </summary>
        private string startTime;


        /// <summary>
        /// end time 
        /// </summary>
        private string endTime;

        /// <summary>
        /// Setting the build duration
        /// </summary>
        private string duratinoSecs;


        /// <summary>
        /// Gets or sets a value indicating whether
        /// triggering to the build on source code
        /// modification should be enabled.
        /// </summary>
        public bool EnableFilterTrigger
        {
            get { return this.enableFilterTrigger; }
            set { this.enableFilterTrigger = value; }
        }

        /// <summary>
        /// Gets or sets trigger interval for build.
        /// </summary>
        public string StartTime
        {
            get { return this.startTime; }
            set { this.startTime = value; }
        }

        /// <summary>
        /// Gets or Sets Build Condition
        /// </summary>
        public string EndTime
        {
            get { return this.endTime; }
            set { this.endTime = value; }
        }

        public string DuratinoSecs
        {
            get { return this.duratinoSecs; }
            set { this.duratinoSecs = value; }

        }


    }


    /// <summary>
    /// Email Settings structure.
    /// </summary>
    public class EmailSettings
    {
        /// <summary>
        /// Enable/Disable e-mail task.
        /// </summary>
        private bool enableEmail;

        /// <summary>
        /// Smtp server.
        /// </summary>
        private string smtpServer;

        /// <summary>
        /// To addressess.
        /// </summary>
        private string toAddresses;

        /// <summary>
        /// From email addressess.
        /// </summary>
        private string fromAddresses;

        /// <summary>
        /// Subject of the mail.
        /// </summary>
        //private string subject;

        /// <summary>
        /// Body of the email.
        /// </summary>
        //private string body;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// email should be sent with the build
        /// status when the build is complete.
        /// </summary>
        public bool EnableEmail
        {
            get { return this.enableEmail; }
            set { this.enableEmail = value; }
        }

        /// <summary>
        /// Gets or sets the smtp server.
        /// </summary>
        public string SmtpServer
        {
            get { return this.smtpServer; }
            set { this.smtpServer = value; }
        }

        /// <summary>
        /// Gets or sets the to addresses to which 
        /// the build status mail has to be sent.
        /// </summary>
        public string ToAddresses
        {
            get { return this.toAddresses; }
            set { this.toAddresses = value; }
        }

        /// <summary>
        /// Gets or sets the from addresses from
        /// which the build status mail to be sent.
        /// </summary>
        public string FromAddresses
        {
            get { return this.fromAddresses; }
            set { this.fromAddresses = value; }
        }

        /// <summary>
        /// Gets or sets the subject of the mail.
        /// </summary>
        //public string Subject
        //{
        //    get { return this.subject; }
        //    set { this.subject = value; }
        //}

        /// <summary>
        /// Gets or sets the content of the mail.
        /// </summary>
        //public string Body
        //{
        //    get { return this.body; }
        //    set { this.body = value; }
        //}
    }

    /// <summary>
    /// Structure carrying compilation settings.
    /// </summary>
    public class CompileSettings
    {
        /// <summary>
        /// Configuration to be compiled.
        /// </summary>
        private string buildConfiguration;

        ///// <summary>
        ///// build script file name.
        ///// </summary>
        // public string BuildScriptFile;

        ///// <summary>
        ///// target to be executed in the script.
        ///// </summary>
        // public string BuildTarget;

        /// <summary>
        /// Build time out.
        /// </summary>
        private string buildTimeout;

        /// <summary>
        /// Main solution file to be compiled.
        /// </summary>
        private string solutionFile;

        /// <summary>
        /// Code check-in waiting time
        /// </summary>
        private string checkinWaitingTime;


        /// <summary>
        /// Gets or sets the build configuration
        /// Eg. Debug/Release.
        /// </summary>
        public string BuildConfiguration
        {
            get { return this.buildConfiguration; }
            set { this.buildConfiguration = value; }
        }

        /// <summary>
        /// Gets or sets the timeout of the build.
        /// </summary>
        public string BuildTimeout
        {
            get { return this.buildTimeout; }
            set { this.buildTimeout = value; }
        }

        /// <summary>
        /// Gets or sets the main solution file 
        /// name to be built.
        /// </summary>
        public string SolutionFile
        {
            get { return this.solutionFile; }
            set { this.solutionFile = value; }
        }

        /// <summary>
        /// Gets or sets the check in waiting time		
        /// </summary>
        public string CheckinWaitingTime
        {
            get { return this.checkinWaitingTime; }
            set { this.checkinWaitingTime = value; }
        }
    }

    /// <summary>
    /// Structure carrying stylecop settings.
    /// </summary>
    public class StyleCopSettings
    {
        /// <summary>
        /// Enable/Disable stylecop task.
        /// </summary>
        private bool enableStyleCop;

        ///// <summary>
        ///// Stylecop report file name.
        ///// </summary>
        //private string styleCopReportFile;

        /// <summary>
        /// Customized settings file for the project.
        /// </summary>
        private string styleCopCustomSettingsFile;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// stylecop task to be enabled or not.
        /// </summary>
        public bool EnableStyleCop
        {
            get { return this.enableStyleCop; }
            set { this.enableStyleCop = value; }
        }

        ///// <summary>
        ///// Gets or sets the stylecop report file.
        ///// </summary>
        //public string StyleCopReportFile
        //{
        //    get { return this.styleCopReportFile; }
        //    set { this.styleCopReportFile = value; }
        //}

        /// <summary>
        /// Gets or sets the customized stylecop
        /// settings file.
        /// </summary>
        public string StyleCopCustomSettingsFile
        {
            get { return this.styleCopCustomSettingsFile; }
            set { this.styleCopCustomSettingsFile = value; }
        }
    }

    /// <summary>
    /// Structure carrying nunit settings.
    /// </summary>
    public class NUnitSettings
    {
        /// <summary>
        /// Enable/Disable nunit task.
        /// </summary>
        private bool enableNUnit;

        /// <summary>
        /// Nunit EXE Path name.
        /// </summary>
        private string nunitEXEPath;
        /// <summary>
        /// Nunit report file name.
        /// </summary>
        private string nunitReportFile;

        /// <summary>
        /// Nunit DLL file name.
        /// </summary>
        private string nunitdllname;

        /// <summary>
        /// NUnit dependants
        /// </summary>
        private string nUnitDependants;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// nunit task has to be enabled or not.
        /// </summary>       

        public bool EnableNUnit
        {
            get { return this.enableNUnit; }
            set { this.enableNUnit = value; }
        }

        /// <summary>
        /// Gets or sets NUnit EXE Path Name.	
        /// </summary>   

        public string NUnitEXEPath
        {
            get
            {
                return this.nunitEXEPath;
            }
            set
            {
                this.nunitEXEPath = value;
            }
        }

        /// <summary>
        /// Gets or sets the nunit report file name.
        /// </summary>
        public string NUnitReportFile
        {
            get { return this.nunitReportFile; }
            set { this.nunitReportFile = value; }
        }

        /// <summary>
        /// Gets or sets nunit dll name;
        /// </summary>   
        public string NUnitDLLName
        {
            get { return this.nunitdllname; }
            set { this.nunitdllname = value; }
        }

        /// <summary>
        /// Gets or sets nunit dependants
        /// </summary>   
        public string NUnitDependants
        {
            get
            {
                return this.nUnitDependants;
            }
            set
            {
                this.nUnitDependants = value;
            }
        }
    }

    /// <summary>
    /// Structure carrying ncover settings.
    /// </summary>
    public class NCoverSettings
    {
        /// <summary>
        /// Enable/Disable ncover task.
        /// </summary>
        private bool enableNCover;

        /// <summary>
        /// string for dependant targets
        /// </summary>
        private string nCoverDependants;

        ///// <summary>
        ///// Ncover report file name.
        ///// </summary>
        //private string ncoverReportFile;

        /// <summary>
        /// Ncover log file name.
        /// </summary>
        private string ncoverLogFile;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// ncover task has to be executed or not.
        /// </summary>
        public bool EnableNCover
        {
            get { return this.enableNCover; }
            set { this.enableNCover = value; }
        }

        ///// <summary>
        ///// Gets or sets ncover report filename.
        ///// </summary>
        //public string NCoverReportFile
        //{
        //    get { return this.ncoverReportFile; }
        //    set { this.ncoverReportFile = value; }
        //}

        /// <summary>
        /// Gets or sets the ncover log file name.
        /// </summary>
        public string NCoverLogFile
        {
            get { return this.ncoverLogFile; }
            set { this.ncoverLogFile = value; }
        }

        /// <summary>
        /// Gets or sets the ncoverDependants
        /// </summary>
        public string NCoverDependants
        {
            get
            {
                return this.nCoverDependants;
            }
            set
            {
                this.nCoverDependants = value;
            }
        }
    }

    /// <summary>
    /// Structure carrying ms code coverage setting.
    /// </summary>
    public class MSCodeCoverageSettings
    {
        private bool enableMSCodeCoverage;

        public bool EnableMSCodeCoverage
        {
            get { return enableMSCodeCoverage; }
            set { enableMSCodeCoverage = value; }
        }
        private string instrExePath;

        public string InstrExePath
        {
            get { return instrExePath; }
            set { instrExePath = value; }
        }
        private string perfCmdExePath;

        public string PerfCmdExePath
        {
            get { return perfCmdExePath; }
            set { perfCmdExePath = value; }
        }
        private string msTestExePath;

        public string MsTestExePath
        {
            get { return msTestExePath; }
            set { msTestExePath = value; }
        }
        private string instrBinaries;

        public string InstrBinaries
        {
            get { return instrBinaries; }
            set { instrBinaries = value; }
        }
        private string testBinary;

        public string TestBinary
        {
            get { return testBinary; }
            set { testBinary = value; }
        }
        private string coverageOutputFile;

        public string CoverageOutputFile
        {
            get { return coverageOutputFile; }
            set { coverageOutputFile = value; }
        }


        private string mscovRepLink;

        public string MscovRepLink
        {
            get { return mscovRepLink; }
            set { mscovRepLink = value; }
        }



    }


    /// <summary>
    /// Structure carrying fxcop settings.
    /// </summary>
    public class FxCopSettings
    {
        /// <summary>
        /// Enable/Disable fxcop task.
        /// </summary>
        private bool enableFxCop;

        /// <summary>
        /// Fxcop report file name.
        /// </summary>
        private string fxcopReportFile;

        /// <summary>
        /// Fxcop project file name.
        /// </summary>
        private string fxcopProjectFile;

        /// <summary>
        /// FxCop dependants
        /// </summary>
        private string fxCopDependants;


        /// <summary>
        /// Gets or sets a value indicating whether
        /// fxcop task has to be executed or not.
        /// </summary>
        public bool EnableFxCop
        {
            get { return this.enableFxCop; }
            set { this.enableFxCop = value; }
        }

        /// <summary>
        /// Gets or sets the fxcop report filename.
        /// </summary>
        public string FxCopReportFile
        {
            get { return this.fxcopReportFile; }
            set { this.fxcopReportFile = value; }
        }

        /// <summary>
        /// Gets or sets the fxcop project file name.
        /// </summary>
        public string FxCopProjectFile
        {
            get { return this.fxcopProjectFile; }
            set { this.fxcopProjectFile = value; }
        }
        /// <summary>
        /// Gets or sets FxCop dependants
        /// </summary>
        public string FxCopDependants
        {
            get
            {
                return this.fxCopDependants;
            }
            set
            {
                this.fxCopDependants = value;
            }
        }

    }

    /// <summary>
    /// Structure carrying CatNet settings.
    /// </summary>
    /// 
    public class CatNetSettings
    {
        private bool enableCatNet;

        public bool EnableCatNet
        {
            get { return enableCatNet; }
            set { enableCatNet = value; }
        }
        private string scanFiles;

        public string ScanFiles
        {
            get { return scanFiles; }
            set { scanFiles = value; }
        }
        private string cNPath;

        public string CNPath
        {
            get { return cNPath; }
            set { cNPath = value; }
        }
        private string cNRptFileName;

        public string CNRptFileName
        {
            get { return cNRptFileName; }
            set { cNRptFileName = value; }
        }
    }

    /// <summary>
    /// Structure carrying sandcastle HFB settings.
    /// </summary>
    public class SandcastleHelpFileBuilderSettings
    {
        /// <summary>
        /// Enable/Disable documentation task.
        /// </summary>
        private bool enableSandcastleHelpFileBuilder;

        /// <summary>
        /// Documentation output directory.
        /// </summary>
        private string sandCastleHelpFileBuilderOutputDirectory;

        /// <summary>
        /// Sandcastlehfb project file name.
        /// </summary>
        private string sandCastleHelpFileBuilderProjectFile;

        /// <summary>
        /// Gets or sets a value indicating whether 
        /// sand castle help file builder task has
        /// to be enabled or not.
        /// </summary>
        public bool EnableSandcastleHelpFileBuilder
        {
            get { return this.enableSandcastleHelpFileBuilder; }
            set { this.enableSandcastleHelpFileBuilder = value; }
        }

        /// <summary>
        /// SandCastleHelpFileBuilder dependants.
        /// </summary>
        private string shfbDependants;


        /// <summary>
        /// Gets or sets Output directory name of 
        /// sandcastle help file builder task.
        /// </summary>
        public string SandcastleHelpFileBuilderOutputDirectory
        {
            get { return this.sandCastleHelpFileBuilderOutputDirectory; }
            set { this.sandCastleHelpFileBuilderOutputDirectory = value; }
        }

        /// <summary>
        /// Gets or sets sandcastle help file 
        /// builder project file name.
        /// </summary>
        public string SandcastleHelpFileBuilderProjectFile
        {
            get { return this.sandCastleHelpFileBuilderProjectFile; }
            set { this.sandCastleHelpFileBuilderProjectFile = value; }
        }

        /// <summary>
        /// Gets or sets sandcastle dependants		
        /// </summary>
        public string SHFBDependants
        {
            get
            {
                return this.shfbDependants;
            }
            set
            {
                this.shfbDependants = value;
            }
        }
    }

    /// <summary>
    /// Structure carrying ndepend settings.
    /// </summary>
    public class NDependSettings
    {
        /// <summary>
        /// Enable/Disable ndepend task.
        /// </summary>
        private bool enableNDepend;

        /// <summary>
        /// Ndepend report directory name.
        /// </summary>
        private string ndependReportDirectory;

        /// <summary>
        /// Ndepend project file name.
        /// </summary>
        private string ndependProjectFile;

        /// <summary>
        /// NDepend dependants
        /// </summary>
        private string nDependDependants;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// the ndepend task has to be enabled or not.
        /// </summary>
        public bool EnableNDepend
        {
            get { return this.enableNDepend; }
            set { this.enableNDepend = value; }
        }

        /// <summary>
        /// Gets or sets the ndepend report directory
        /// name.
        /// </summary>
        public string NDependReportDirectory
        {
            get { return this.ndependReportDirectory; }
            set { this.ndependReportDirectory = value; }
        }

        /// <summary>
        /// Gets or sets the ndepend project file name.
        /// </summary>
        public string NDependProjectFile
        {
            get { return this.ndependProjectFile; }
            set { this.ndependProjectFile = value; }
        }
        /// <summary>
        /// Gets or sets the ndepend dependants
        /// </summary>
        public string NDependDependants
        {
            get
            {
                return this.nDependDependants;
            }
            set
            {
                this.nDependDependants = value;
            }

        }
    }

    /// <summary>
    /// Structure carrying database settings.
    /// </summary>
    public class DatabaseSettings
    {
        /// <summary>
        /// Enable/Disable database task.
        /// </summary>
        private bool enableDatabase;

        /// <summary>
        /// Database server name.
        /// </summary>
        private string databaseServerName;

        /// <summary>
        /// Database login id.
        /// </summary>
        private string databaseLogOn;

        /// <summary>
        /// Database password.
        /// </summary>
        private string databasePassword;

        /// <summary>
        /// Database name.
        /// </summary>
        private string databaseName;

        /// <summary>
        /// Enable/Disable database task.
        /// </summary>
        private string dbDependants;


        /// <summary>
        /// Gets or sets a value indicating whether
        /// the database task has to be enabled or not.
        /// </summary>
        public bool EnableDatabase
        {
            get { return this.enableDatabase; }
            set { this.enableDatabase = value; }
        }

        /// <summary>
        /// Gets or sets the database server name.
        /// </summary>
        public string DBServerName
        {
            get { return this.databaseServerName; }
            set { this.databaseServerName = value; }
        }

        /// <summary>
        /// Gets or sets the database login id.
        /// </summary>
        public string DBLogin
        {
            get { return this.databaseLogOn; }
            set { this.databaseLogOn = value; }
        }

        /// <summary>
        /// Gets or sets the database password.
        /// </summary>
        public string DBPassword
        {
            get { return this.databasePassword; }
            set { this.databasePassword = value; }
        }

        /// <summary>
        /// Gets or sets the database name.
        /// </summary>
        public string DBName
        {
            get { return this.databaseName; }
            set { this.databaseName = value; }
        }
        /// <summary>
        /// Gets or sets the database dependants
        /// </summary>
        public string DBDependants
        {
            get
            {
                return this.dbDependants;
            }
            set
            {
                this.dbDependants = value;
            }
        }
    }

    /// <summary>
    /// Post-Script Settings structure.
    /// </summary>
    public class PostScriptSettings
    {
        /// <summary>
        /// Enable/Disable post-script task.
        /// </summary>
        private bool enablePostScript;

        /// <summary>
        /// Enable/Disable post-compile task.
        /// </summary>
        private bool enablePostCompile;

        /// <summary>
        /// Enable/Disable post-deploy task.
        /// </summary>
        private bool enablePostDeploy;

        /// <summary>
        /// Post-Script file name.
        /// </summary>
        private string postscriptFile;

        /// <summary>
        /// Post-Compile Script file name.
        /// </summary>
        private string postCompileFile;

        /// <summary>
        /// Post-Deploy Script file name.
        /// </summary>
        private string postDeployFile;

        /// <summary>
        /// Gets or sets a value indicating whether
        /// the post build script task has to be 
        /// enabled or not.
        /// </summary>
        public bool EnablePostScript
        {
            get { return this.enablePostScript; }
            set { this.enablePostScript = value; }
        }

        /// <summary>
        /// Gets or sets a value indicating whether
        /// the post compile script task has to be 
        /// enabled or not.
        /// </summary>
        public bool EnablePostCompile
        {
            get { return this.enablePostCompile; }
            set { this.enablePostCompile = value; }
        }

        /// <summary>
        /// Gets or sets a value indicating whether
        /// the post deploy script task has to be 
        /// enabled or not.
        /// </summary>
        public bool EnablePostDeploy
        {
            get { return this.enablePostDeploy; }
            set { this.enablePostDeploy = value; }
        }

        /// <summary>
        /// Gets or sets Post-Script file name.
        /// </summary>
        public string PostScriptFile
        {
            get { return this.postscriptFile; }
            set { this.postscriptFile = value; }
        }

        /// <summary>
        /// Gets or sets Post-Compile Script file name.
        /// </summary>
        public string PostCompileScriptFile
        {
            get { return this.postCompileFile; }
            set { this.postCompileFile = value; }
        }

        /// <summary>
        /// Gets or sets Post-Deploy Script file name.
        /// </summary>
        public string PostDeployScriptFile
        {
            get { return this.postDeployFile; }
            set { this.postDeployFile = value; }
        }


    }

    /// <summary>
    /// MSTest Settings structure.
    /// </summary>
    public class MstestSettings
    {
        /// <summary>
        /// Enable / Disable MSTestTask
        /// </summary>
        private bool enableMstestTask;

        /// <summary>
        /// EXE path for MSTest
        /// </summary>
        private string mstestExe;

        /// <summary>
        /// DLL filename for MSTest
        /// </summary>
        private string mstestDll;

        /// <summary>
        /// path for MSTest output
        /// </summary>
        private string mstestoutput;

        /// <summary>
        /// MSTest dependants
        /// </summary>
        private string msTestDependants;

        /// <summary>
        /// Get / Set path for enable / disable MSTestTask
        /// </summary>
        public bool EnableMstestTask
        {
            get { return enableMstestTask; }
            set { enableMstestTask = value; }
        }

        /// <summary>
        /// Get / Set EXE path for MSTest
        /// </summary>
        public string MstestExe
        {
            get { return mstestExe; }
            set { mstestExe = value; }
        }

        /// <summary>
        /// Get / Set filename for MSTest
        /// </summary>
        public string MstestDll
        {
            get { return mstestDll; }
            set { mstestDll = value; }
        }

        /// <summary>
        /// Get / Set filepath for MSTest output
        /// </summary>
        public string Mstestoutput
        {
            get { return mstestoutput; }
            set { mstestoutput = value; }
        }
        /// <summary>
        /// Get / Set filepath for MSTest dependants
        /// </summary>
        public string MsTestDependants
        {
            get
            {
                return this.msTestDependants;
            }
            set
            {
                this.msTestDependants = value;
            }
        }
    }

    /// <summary>
    /// IIS Settings Structure
    /// </summary>
    public class IISSettings
    {
        /// <summary>
        /// Name for the server where the project is going to be hosted
        /// </summary>
        private string webserverName;

        /// <summary>
        /// Application pool name for the virtual directory configuration
        /// </summary>
        private string appPoolName;

        /// <summary>
        /// Virutal directory name or Alias for the project configuration
        /// </summary>
        private string virtualDirectoryName;

        /// <summary>
        /// Physical directory location for mapping with Virtual directory name
        /// </summary>
        private string physicalDirectoryLocation;

        /// <summary>
        /// Web Project Location path
        /// </summary>
        private string projectLocation;

        /// <summary>
        /// Name for the server where the project is going to be hosted
        /// </summary>
        private string iisDependants;

        /// <summary>
        /// IIS Type
        /// </summary>
        private string iisType;

        /// <summary>
        /// enable / disable IIS Setting
        /// </summary>
        private bool enableIIS;

        /// <summary>
        /// Location for the production server where deployment needs to happen
        /// </summary>
        private string locationProdServer;

        /// <summary>
        /// Location for the QA server where deployment needs to happen
        /// </summary>
        private string locationQAServer;

        /// <summary>
        /// Location for the Development server where deployment needs to happen
        /// </summary>
        private string locationDevServer;

        /// <summary>
        /// Get / Set Name for the server where the project is going to be hosted
        /// </summary>
        public string WebServerName
        {
            get
            {
                return this.webserverName;
            }
            set
            {
                this.webserverName = value;
            }
        }

        /// <summary>
        /// Get / Set Application pool name for the virtual directory configuration
        /// </summary>
        public string ApplicationPoolName
        {
            get
            {
                return this.appPoolName;
            }
            set
            {
                this.appPoolName = value;
            }
        }

        /// <summary>
        /// Get / Set Virutal directory name or Alias for the project configuration
        /// </summary>
        public string VirtualDirectoryName
        {
            get
            {
                return this.virtualDirectoryName;
            }
            set
            {
                this.virtualDirectoryName = value;
            }
        }

        /// <summary>
        /// Get / Set Physical directory location for mapping with Virtual directory name
        /// </summary>
        public string PhysicalDirectoryPath
        {
            get
            {
                return this.physicalDirectoryLocation;
            }
            set
            {
                this.physicalDirectoryLocation = value;
            }
        }

        /// <summary>
        /// Get / Set Web Project Location path
        /// </summary>
        public string WebProjectPath
        {
            get
            {
                return this.projectLocation;
            }
            set
            {
                this.projectLocation = value;
            }
        }
        /// <summary>
        /// IISSettings Dependants
        /// </summary>
        public string IISDependants
        {
            get
            {
                return this.iisDependants;
            }
            set
            {
                this.iisDependants = value;
            }
        }
        /// <summary>
        /// IISSettings Dependants
        /// </summary>
        public string IISType
        {
            get
            {
                return this.iisType;
            }
            set
            {
                this.iisType = value;
            }
        }
        /// <summary>
        /// Get / Set IIS enable / diable
        /// </summary>
        public bool EnableIIS
        {
            get
            {
                return this.enableIIS;
            }
            set
            {
                this.enableIIS = value;
            }
        }

        /// <summary>
        /// Get / Set Production Server location for deployment
        /// </summary>
        public string ProductionServerLocation
        {
            get
            {
                return this.locationProdServer;
            }
            set
            {
                this.locationProdServer = value;
            }
        }

        /// <summary>
        /// Get / Set QA Server location for deployment
        /// </summary>
        public string QAServerLocation
        {
            get
            {
                return this.locationQAServer;
            }
            set
            {
                this.locationQAServer = value;
            }
        }

        /// <summary>
        /// Get / Set QA Server location for deployment
        /// </summary>
        public string DevelopmentServerLocation
        {
            get
            {
                return this.locationDevServer;
            }
            set
            {
                this.locationDevServer = value;
            }
        }
    }


    /// <summary>
    /// Mother structure carrying entire build info.
    /// </summary>
    public class BuildParameters
    {
        /// <summary>
        /// General settings structure.
        /// </summary>
        private GeneralSettings generalSettings;

        /// <summary>
        /// Pre-Script structure.
        /// </summary>
        private PreScriptSettings prescriptSettings;

        /// <summary>
        /// Versioning structure.
        /// </summary>
        private VersioningSettings versioningSettings;

        /// <summary>
        /// Structure carries svn settings.
        /// </summary>
        private SourceControlSettings sourceControlSettings;

        /// <summary>
        /// Structure carries triggering task info.
        /// </summary>
        private TriggerSettings triggerSettings;
        private ScheduleTriggerSetting scheduleTriggerSetting;
        private FilterTriggerSetting filterTriggerSetting;

        /// <summary>
        /// Structure carries compilation settings.
        /// </summary>
        private CompileSettings compileSettings;

        /// <summary>
        /// Structure carries stylecop settings.
        /// </summary>
        private StyleCopSettings styleCopSettings;

        /// <summary>
        /// Structure carries nunit settings.
        /// </summary>
        private NUnitSettings nunitSettings;

        /// <summary>
        /// Structure carries ncover settings.
        /// </summary>
        private NCoverSettings ncoverSettings;

        /// <summary>
        /// Structure carries MSCodeCoverageSettings settings.
        /// </summary>
        private MSCodeCoverageSettings mscodeCoverageSettings;


        /// <summary>
        /// Structure carries fxcop settings.
        /// </summary>
        private FxCopSettings fxcopSettings;

        /// <summary>
        /// Structure carries fxcop settings.
        /// </summary>
        private CatNetSettings catNetSettings;

        /// <summary>
        /// Structure carries documentation settings.
        /// </summary>
        private SandcastleHelpFileBuilderSettings sandCastleHelpFileBuilderSettings;

        /// <summary>
        /// Structure carries ndepend settings.
        /// </summary>
        private NDependSettings ndependSettings;

        /// <summary>
        /// Structure carries database settings.
        /// </summary>
        private DatabaseSettings databaseSettings;

        /// <summary>
        /// Structure carries email settings.
        /// </summary>
        private EmailSettings emailSettings;

        /// <summary>
        /// Post-Script structure.
        /// </summary>
        private PostScriptSettings postscriptSettings;


        /// <summary>
        /// MSTest Setting
        /// </summary>
        private MstestSettings mstestSettings;


        /// <summary>
        /// IIS settings structure.
        /// </summary>
        private IISSettings iisSettings;

        /// <summary>
        /// Gets or sets general settings.
        /// </summary>
        /// 
        public GeneralSettings GeneralSettings
        {
            get { return this.generalSettings; }
            set { this.generalSettings = value; }
        }

        /// <summary>
        /// Gets or sets the versioning settings.
        /// </summary>
        public VersioningSettings VersioningSettings
        {
            get { return this.versioningSettings; }
            set { this.versioningSettings = value; }
        }

        /// <summary>
        /// Gets or sets the Pre-script settings.
        /// </summary>
        public PreScriptSettings PreScriptSettings
        {
            get { return this.prescriptSettings; }
            set { this.prescriptSettings = value; }
        }

        /// <summary>
        /// Gets or sets the source control settings.
        /// </summary>
        public SourceControlSettings SourceControlSettings
        {
            get { return this.sourceControlSettings; }
            set { this.sourceControlSettings = value; }
        }

        /// <summary>
        /// Gets or sets the trigger settings.
        /// </summary>
        public TriggerSettings TriggerSettings
        {
            get { return this.triggerSettings; }
            set { this.triggerSettings = value; }
        }
        public ScheduleTriggerSetting ScheduleTriggerSetting
        {
            get { return this.scheduleTriggerSetting; }
            set { this.scheduleTriggerSetting = value; }
        }
        public FilterTriggerSetting FilterTriggerSetting
        {
            get { return this.filterTriggerSetting; }
            set { this.filterTriggerSetting = value; }
        }



        /// <summary>
        /// Gets or sets the compilation settings.
        /// </summary>
        public CompileSettings CompileSettings
        {
            get { return this.compileSettings; }
            set { this.compileSettings = value; }
        }

        /// <summary>
        /// Gets or sets the stylecop settings.
        /// </summary>
        public StyleCopSettings StyleCopSettings
        {
            get { return this.styleCopSettings; }
            set { this.styleCopSettings = value; }
        }

        /// <summary>
        /// Gets or sets the nunit settings.
        /// </summary>
        public NUnitSettings NUnitSettings
        {
            get { return this.nunitSettings; }
            set { this.nunitSettings = value; }
        }

        /// <summary>
        /// Gets or sets the ncover settings.
        /// </summary>
        public NCoverSettings NCoverSettings
        {
            get { return this.ncoverSettings; }
            set { this.ncoverSettings = value; }
        }

        public MSCodeCoverageSettings MSCodeCoverageSettings
        {
            get { return this.mscodeCoverageSettings; }
            set { this.mscodeCoverageSettings = value; }
        }

        /// <summary>
        /// Gets or sets the fxcop settings.
        /// </summary>
        public FxCopSettings FxCopSettings
        {
            get { return this.fxcopSettings; }
            set { this.fxcopSettings = value; }
        }

        /// <summary>
        /// Gets or sets the catnet settings.
        /// </summary>
        /// 
        public CatNetSettings CatNetSettings
        {
            get { return this.catNetSettings; }
            set { this.catNetSettings = value; }
        }


        /// <summary>
        /// Gets or sets the sandcastle help
        /// file builder settings.
        /// </summary>
        public SandcastleHelpFileBuilderSettings SandcastleHelpFileBuilderSettings
        {
            get { return this.sandCastleHelpFileBuilderSettings; }
            set { this.sandCastleHelpFileBuilderSettings = value; }
        }

        /// <summary>
        /// Gets or sets the ndepend settings.
        /// </summary>
        public NDependSettings NDependSettings
        {
            get { return this.ndependSettings; }
            set { this.ndependSettings = value; }
        }

        /// <summary>
        /// Gets or sets the databse settings.
        /// </summary>
        public DatabaseSettings DatabaseSettings
        {
            get { return this.databaseSettings; }
            set { this.databaseSettings = value; }
        }

        /// <summary>
        /// Gets or sets the e-mail settings.
        /// </summary>
        public EmailSettings EmailSettings
        {
            get { return this.emailSettings; }
            set { this.emailSettings = value; }
        }

        /// <summary>
        /// Gets or sets the Post-script settings.
        /// </summary>
        public PostScriptSettings PostScriptSettings
        {
            get { return this.postscriptSettings; }
            set { this.postscriptSettings = value; }
        }

        public MstestSettings MSTestSettings
        {
            get { return this.mstestSettings; }
            set { this.mstestSettings = value; }
        }

        public IISSettings IISSettings
        {
            get
            {
                return this.iisSettings;
            }
            set
            {
                this.iisSettings = value;
            }
        }

    }
}